using System.Collections.Generic;
using System.Text;

namespace Kaleida.ServiceMonitor.Model
{
    public class LimitedList<T>
    {
        private readonly string name;
        private int maximumItemCount;
        private readonly List<T> items = new List<T>();

        public LimitedList(string name, int maximumItemCount)
        {
            this.name = name;
            this.maximumItemCount = maximumItemCount;
        }

        public void AddToTop(T request)
        {
            lock (items)
            {
                items.Insert(0, request);

                if (items.Count > maximumItemCount)
                {
                    items.RemoveAt(items.Count - 1);
                }
            }
        }

        public string Name
        {
            get { return name; }
        }

        public int MaximumItemCount
        {
            get { return maximumItemCount; }
            set { maximumItemCount = value; }
        }

        public IList<T> Items
        {
            get { return items; }
        }

        public string Summary()
        {
            var contentSummary = new StringBuilder();
            contentSummary.AppendFormat("Last {0} ", MaximumItemCount);
            contentSummary.Append(Name);
            contentSummary.Append(MaximumItemCount == 1 ? "" : "s");

            return contentSummary.ToString();
        }
    }
}